main() {
  // 调用泛型函数
  print(getData<int>(100));
  print(getData<String>('hello'));
  // 调用泛型类
  var user1 = User<int>(100);
  var user2 = User<String>('hello');
  print(user1.data);
  print(user2.data);
  // 调用泛型方法
  var list1 = [1, 2, 3, 4, 5];
  var list2 = ['a', 'b', 'c', 'd', 'e'];
  print(getListData<int>(list1).reduce((sum, item) => sum + item));
  print(getListData<String>(list2).join(''));
}

// 函数泛型
T getData<T>(T data) {
  return data;
}

// 泛型类
class User<T> {
  T data;
  User(this.data);
}

// 泛型方法
List<T> getListData<T>(List<T> list) {
  return list;
}

